package com.irdstudio.efp.esb.api.service.sed.ploaninfo;

import com.irdstudio.efp.esb.service.bo.resp.hj.AcctDtlInfBean;
import sun.security.krb5.internal.PAForUserEnc;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Objects;

/**
* 普税贷产品对税e贷产品的此部分代码做了复用
* 说明：为了保证功能的复用性、提升开发的工作效率，对该代码进行了复用
* 评估是否会影响线上功能：否
* 评估时间：2020/5/25
* 处理方案：保留复用
*/
public class PloaninfoUtils {

    public static BigDecimal getAddResult(BigDecimal... bigDecimals) {
        BigDecimal total = new BigDecimal(0.00);
        for (BigDecimal bigDecimal : bigDecimals) {
            if (!Objects.isNull(bigDecimal)) {
                total = total.add(bigDecimal);
            }
        }
        return total;
    }

    /**
     * 根据还款计划统计欠款金额
     * 本金+利息+出单罚息+出单复利+自提罚息+自提复利-实还（本金、利息、罚息、复利）
     * @return
     */
    public static BigDecimal getPlanNeedAmt(AcctDtlInfBean acctDtlInfBean) {
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        BigDecimal total = new BigDecimal(0.00);
        //出单本金
        if (!Objects.isNull(acctDtlInfBean.getPlanPrin())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanPrin())));
        }
        //出单利息
        if (!Objects.isNull(acctDtlInfBean.getPlanInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanInt())));
        }
        //出单罚息
        if (!Objects.isNull(acctDtlInfBean.getIssuePnyInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getIssuePnyInt())));
        }
        //出单复利
        if (!Objects.isNull(acctDtlInfBean.getIssueCmpdInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getIssueCmpdInt())));
        }
        //自提罚息
        if (!Objects.isNull(acctDtlInfBean.getAlrdyPrvnPnyInt())) {
            total = total.add(acctDtlInfBean.getAlrdyPrvnPnyInt());
        }
        //自提复利
        if (!Objects.isNull(acctDtlInfBean.getAlrdyPrvnCmpdInt())) {
            total = total.add(acctDtlInfBean.getAlrdyPrvnCmpdInt());
        }
        //实还本金
        if (!Objects.isNull(acctDtlInfBean.getActRpyPrin())) {
            total = total.subtract(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyPrin())));
        }
        //实还利息
        if (!Objects.isNull(acctDtlInfBean.getActRpyInt())) {
            total = total.subtract(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyInt())));
        }
        //实还罚息
        if (!Objects.isNull(acctDtlInfBean.getActRpyPnyInt())) {
            total = total.subtract(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyPnyInt())));
        }
        //实还复利
        if (!Objects.isNull(acctDtlInfBean.getActRpyCmpdInt())) {
            total = total.subtract(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyCmpdInt())));
        }
        return total;
    }

    /**
     * 根据还款计划统计期供金额
     * 计划本金+计划利息
     * @return
     */
    public static BigDecimal getPlanAmt(AcctDtlInfBean acctDtlInfBean) {
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        BigDecimal total = new BigDecimal(0.00);
        //计划本金
        if (!Objects.isNull(acctDtlInfBean.getPlanPrin())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanPrin())));
        }
        //计划利息
        if (!Objects.isNull(acctDtlInfBean.getPlanInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanInt())));
        }
        return total;
    }

    /**
     * 根据还款计划统计已还金额
     * @param acctDtlInfBean
     * @return
     */
    public static BigDecimal getPaided(AcctDtlInfBean acctDtlInfBean) {
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        BigDecimal total = new BigDecimal(0.00);
        //实还本金
        if (!Objects.isNull(acctDtlInfBean.getActRpyPrin())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyPrin())));
        }
        //实还利息
        if (!Objects.isNull(acctDtlInfBean.getActRpyInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyInt())));
        }
        //实还罚息
        if (!Objects.isNull(acctDtlInfBean.getActRpyPnyInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyPnyInt())));
        }
        //实还复利
        if (!Objects.isNull(acctDtlInfBean.getActRpyCmpdInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getActRpyCmpdInt())));
        }
        return total;

    }

    /**
     * 根据还款计划统计应还金额
     * 计划本金+计划利息+出单罚息+出单复利+自提罚息+自提复利
     * @return
     */
    public static BigDecimal getPlanTotalAmt(AcctDtlInfBean acctDtlInfBean) {
        DecimalFormat decimalFormat = new DecimalFormat("#.00");
        BigDecimal total = new BigDecimal(0.00);
        //本金
        if (!Objects.isNull(acctDtlInfBean.getPlanPrin())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanPrin())));
        }
        //利息
        if (!Objects.isNull(acctDtlInfBean.getPlanInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getPlanInt())));
        }
        //出单罚息
        if (!Objects.isNull(acctDtlInfBean.getIssuePnyInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getIssuePnyInt())));
        }
        //出单复利
        if (!Objects.isNull(acctDtlInfBean.getIssueCmpdInt())) {
            total = total.add(new BigDecimal(decimalFormat.format(acctDtlInfBean.getIssueCmpdInt())));
        }
        //自提罚息
        if (!Objects.isNull(acctDtlInfBean.getAlrdyPrvnPnyInt())) {
            total = total.add(acctDtlInfBean.getAlrdyPrvnPnyInt());
        }
        //自提复利
        if (!Objects.isNull(acctDtlInfBean.getAlrdyPrvnCmpdInt())) {
            total = total.add(acctDtlInfBean.getAlrdyPrvnCmpdInt());
        }
        return total;
    }
}
